package com.cskaoyan.javase.homework.day08.student;

/**
 * 学生类
 * 在外界，学生类只能得到十个对象，从第11个开始，禁止创建对象
 * 分析:
 * 要想控制外界创建对象的次数,需要首先做什么?
 * -->
 * 1.需要控制次数,所以需要一个计数器count,它是一个静态成员变量
 * 2.如果类中的构造器对外有访问权限,那么外界必然可以随意创建对象
 *      所以应该私有化类中的构造器,不对外开放权限
 *
 * -->
 * 现在构造器已经私有了,外界是真的不能new对象了,也就是说外界得不到对象了
 * 但是我们希望外界能够得到十个对象,怎么办?
 *
 * 目前能够创建对象的位置,只能在类的内部了
 *
 * 所以,需要在该类内部提供一个方法,来对外提供对象,并且控制提供对象的次数
 *
 * -->
 * 怎么做呢?
 *
 * 这个方法应该是一个静态成员方法,而且该方法的返回值类型是该类型,该方法会返回一个该类型的对象
 * 这个方法既然是对外提供对象的,它的访问权限应该给public
 *
 * @since 09:34
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Student {
    private int id;
    private String name;
    private double score;

    private static int count = 0;

    private Student(int id, String name, double score) {
        this.id = id;
        this.name = name;
        this.score = score;
    }

    public static Student getInstance(int id, String name, double score) {
        // 为了控制创建对象的次数,需要if判断count
        // 开发中,我们写代码时要特别关注边界值的测试,与其想半天,不如测试一下
        if (count < 10) {
            count++;
            return new Student(id, name, score);
        }
        // 如果超过十次,就返回null,表示不能创建对象了
        return null;
    }
}
